//package com.fc.common.aspect;
//
//
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.fc.common.api.service.CommonAPI;
//import com.fc.common.api.vo.Dict;
//import com.fc.vo.Result;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Field;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//
//@Aspect
//@Component
//public class DictAspect {
//    @Autowired
//    private CommonAPI commonAPI;
//
//    @Autowired
//    private RedisTemplate<Object,Object> redisTemplate;
//
//    @Pointcut("execution(public * com.fc..*.*Controller.*(..))")
//    public void excudeService() {
//    }
//
//    @Pointcut("execution(public * com.fc..*.*API.*(..))")
//    public void excudeService2() {
//    }
//
//
//    @Around("excudeService()")
//    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
////        System.out.println("拦截到了啊");
////        System.out.println(commonAPI);
//        Object object = pjp.proceed();
//        this.parseObject(object);
//        return object;
//    }
//
//    @Around("excudeService2()")
//    public Object doAround2(ProceedingJoinPoint pjp) throws Throwable {
////        System.out.println("拦截到了啊");
////        System.out.println(commonAPI);
//        Object object = pjp.proceed();
//        this.parseObject(object);
//        return object;
//    }
//
//    private void parseObject(Object object) throws JsonProcessingException, IllegalAccessException {
//        //当返回类型是 result<Page>@Dict注解才生效
//        //(((Result) object).getResult()) instanceof Page 这一段不能拿出来写，因为这个AOP对所有controller方法都拦截，有的result不一定返回Page
//        if (object instanceof Result && (((Result) object).getResult()) instanceof Page) {
////            System.out.println("执行了");
//            //获得result的list集合
//            Page page = (Page) ((Result) object).getResult();
//            List list = page.getRecords();
//            //如果为null或者为空 直接返回
//            if (list == null || list.size() == 0)
//                return;
//            Class c = null;
//            //获得object对象的class属性
//            if (list.size() > 0) {
//                c = list.get(0).getClass();
//            }
//            //获取所有属性
//            Field[] fields = c.getDeclaredFields();
//            //存放带有@Dict注解的属性
//            List<Field> dicFields = new ArrayList<Field>();
//            for (int j = 0; j < fields.length; j++) {
//                if (fields[j].isAnnotationPresent(Dict.class)) {
//                    dicFields.add(fields[j]);
//                }
//            }
//            //如果属性没有加上@Dict注解， 直接返回
//            if (dicFields.size() == 0) {
//                return;
//            }
//
//            for (int i = 0; i < list.size(); i++) {
////        System.out.println(dicFields.size());
//                ObjectMapper mapper = new ObjectMapper();
//                String json = mapper.writeValueAsString(list.get(i));
////        System.out.println(json);
//                JSONObject o = JSONObject.parseObject(json);
//                for (int k = 0; k < dicFields.size(); k++) {
//                    Dict dict = dicFields.get(k).getAnnotation(Dict.class);
//
//                    Map<String, Object> map = new HashMap<String, Object>();
//                    String table = null, text = null, code;
//                    if(dict.dicText().equals("") && dict.dictTable().equals("")){
//                        dicFields.get(k).setAccessible(true);
//                        code = dict.dicCode();
//                        String key = dicFields.get(k).getName() + "_text";
//                        String val = redisTemplate.opsForHash().get(code,dicFields.get(k).get(list.get(i))+"")+"";
//                        o.put(key, val);
//                        continue;
//                    }
//
//
//                    if (dict.dicText().equals("") && dict.dictTable().equals("")) {
//                        map.put("type", "0");
//                    } else {
//                        table = dict.dictTable();
//                        text = dict.dicText();
//                        map.put("type", "1");
//                    }
//                    code = dict.dicCode();
//                    map.put("table", table);
//                    map.put("text", text);
//                    map.put("code", code);
//                    //破坏封装
//                    dicFields.get(k).setAccessible(true);
//                    //加一个等于null的判断保护程序
//                    if(dicFields.get(k).get(list.get(i)) == null ){
//                        return;
//                    }
//                    map.put("value", dicFields.get(k).get(list.get(i)));
//
//
////                    System.out.println("value:" + dicFields.get(k).get(list.get(i)));
//                    String key = dicFields.get(k).getName() + "_text";
//                    String val = commonAPI.selectDict(map);
////                    System.out.println("val= " + val);
//                    //将新字段放入json中
//                    o.put(key, val);
//                }
//                //最后返回的对象是JSONObject
//                list.set(i, o);
//
//            }
//        }
//
//    }
//
//}
